package connexion;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.Observable;
import java.util.Observer;

import sheepmixView.client.model.Musique;

import android.app.Activity;
import android.util.Log;


public class Connexion extends Observable implements Observer{
	
	public static final String LOG = "---connexionDB---";
	
	private static LinkedList<String> genres = new LinkedList<String>();
	private static LinkedList<String> artistes = new LinkedList<String>();
	private static LinkedList<Musique> musiques = new LinkedList<Musique>();
	private static Client client = new Client();
	public static boolean ajour = false;
	public static String erreur = null;
	public static String info = null;
	public static String nbCredit = null;
	
	private Connexion(){}
	
	private static final Connexion uniqueConnexion = new Connexion();
	
	public static Connexion getInstance(){
		return uniqueConnexion;
	}
	public static Connexion getInstance(Activity a){
		uniqueConnexion.addObserver((Observer) a);
		return uniqueConnexion;
	}
	
	public static void setError(String s){
		erreur = s;
	}
	public static void clearError(){
		erreur = null;
	}
	public static void setInfo(String s){
		info = s;
	}
	public static void clearInfo(){
		info = null;
	}
	
	//fonction update de Observer
	public void update(Observable observable, Object data) {
		//analyse de l'objet
		LinkedList<Object> liste = (LinkedList<Object>)data;
		String type = (String)liste.getFirst();
		Log.v(LOG, "methode update, 1er objet string: " + type);
		Log.v(LOG, "methode update, info = " + info);
		if(type.equals("GENRES")){
			genres = (LinkedList<String>)liste.get(1);	
		}
		if(type.equals("ARTISTES")){
			artistes = (LinkedList<String>)liste.get(1);				
		}
		else if(type.equals("MUSIQUES")){
			musiques = (LinkedList<Musique>)liste.get(1);
		}
		else if(type.equals("CREDIT")){
			nbCredit = (String)liste.get(1);
		}
		else if(type.equals("DATA")){
			erreur = (String)liste.get(1);
		}
		else if(type.equals("INFO")){
			info = (String)liste.get(1);
		}
		else{
			erreur = "UNKNOWN ERROR, type = " + type;
		}
		ajour = true;
		Log.v(LOG, "mis a jour");
		//hasChanged();
		//notifyObservers();
	}
	
	//getters
	public static LinkedList<String> getGenres(){
		return genres;
	}
	
	public static LinkedList<String> getArtistes(){
		return artistes;
	}
	
	public static LinkedList<Musique> getMusiques(){
		return musiques;
	}
	
	public static int getCredits() {
		ajour = false;
		if(client.start()==0){
			client.envoyerTexteAuServeur("#CTR#CREDIT");
			return 0;
		}
		return -1;
	}
	
	//remplit la liste des genres avec tous les genres
	public int demanderGenres(){
		ajour = false;
		genres.clear();
		if(client.start() == 0){
			client.envoyerTexteAuServeur("#GET#GENRE");
			return 0;
		}
		else
			return -1;
		
		
	}
	//remplit la liste des artistes avec tous les artistes
	public int demanderArtistes(){
		ajour = false;
		artistes.clear();
		if(client.start() == 0){
			client.envoyerTexteAuServeur("#GET#ARTISTE");
			return 0;
		}
		return -1;
	}
	//remplit la liste des artistes avec les artistes d'un genre
	public static int demanderArtistes(String genre){
		ajour = false;
		artistes.clear();
		if(client.start()==0){
			client.envoyerTexteAuServeur("#GET#ARTISTE#"+genre);
			return 0;
		}
		return -1;
	}
	//remplit la liste des musiques avec les musiques d'un artiste
	public static int demanderMusiques(String artiste){
		ajour = false;
		musiques.clear();
		if(client.start() == 0){
			client.envoyerTexteAuServeur("#GET#TRACKS#"+artiste);
			return 0;
		}
		return -1;

	}

	public static int lancerMusique(String id) {
		erreur = null;
		ajour = false;
		if(client.start()==0){
			client.envoyerTexteAuServeur("#POST#"+id);
			return 0;
		}
		return -1;
		
	}
	public static void setServeur(String IP) {
		client.setServeur(IP);
		
	}

	
}
